package com.wench.design.pattern.singleton.lazy.demo6;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

/**
 * 使用反射破坏单例模式
 *
 * @author wench
 */
public class ReflectDemo {

    public static void main(String[] args) throws Exception {
        // 获取 Singleton 类的字节码对象
        Class<Singleton> singletonClass = Singleton.class;
        // 获取 Singleton 类的私有无参构造方法对象
        Constructor<Singleton> constructor = singletonClass.getDeclaredConstructor();
        // 取消访问检查
        constructor.setAccessible(true);

        // 创建 Singleton 类的对象singleton
        Singleton singleton = constructor.newInstance();
        // 创建 Singleton 类的对象instance
        Singleton instance = constructor.newInstance();
        // 判断通过反射创建的两个 Singleton 对象是否式同一个对象
        System.out.println(instance == singleton);
    }
}
